home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / dev / gg / ncurses-5.3.lha / ncurses-5.3 / test / rain.c < prev    next >
C/C++ Source or Header  |  2002-10-24  |  2KB  |  137 lines

  1. /*
  2.  * $Id: rain.c,v 1.20 2002/06/29 23:32:18 tom Exp $
  3.  */
  4. #include <test.priv.h>
  5.  
  6. /* rain 11/3/1980 EPS/CITHEP */
  7.  
  8. static float ranf(void);
  9. static void onsig(int sig);
  10.  
  11. static int
  12. next_j(int j)
  13. {
  14.     if (j == 0)
  15.     j = 4;
  16.     else
  17.     --j;
  18.     if (has_colors()) {
  19.     int z = (int) (3 * ranf());
  20.     chtype color = COLOR_PAIR(z);
  21.     if (z)
  22.         color |= A_BOLD;
  23.     attrset(color);
  24.     }
  25.     return j;
  26. }
  27.  
  28. int
  29. main(
  30.     int argc GCC_UNUSED,
  31.     char *argv[]GCC_UNUSED)
  32. {
  33.     int x, y, j;
  34.     static int xpos[5], ypos[5];
  35.     float r;
  36.     float c;
  37.  
  38.     setlocale(LC_ALL, "");
  39.  
  40.     for (j = SIGHUP; j <= SIGTERM; j++)
  41.     if (signal(j, SIG_IGN) != SIG_IGN)
  42.         signal(j, onsig);
  43.  
  44.     initscr();
  45.     if (has_colors()) {
  46.     int bg = COLOR_BLACK;
  47.     start_color();
  48. #if HAVE_USE_DEFAULT_COLORS
  49.     if (use_default_colors() == OK)
  50.         bg = -1;
  51. #endif
  52.     init_pair(1, COLOR_BLUE, bg);
  53.     init_pair(2, COLOR_CYAN, bg);
  54.     }
  55.     nl();
  56.     noecho();
  57.     curs_set(0);
  58.     timeout(0);
  59.  
  60.     r = (float) (LINES - 4);
  61.     c = (float) (COLS - 4);
  62.     for (j = 5; --j >= 0;) {
  63.     xpos[j] = (int) (c * ranf()) + 2;
  64.     ypos[j] = (int) (r * ranf()) + 2;
  65.     }
  66.  
  67.     for (j = 0;;) {
  68.     x = (int) (c * ranf()) + 2;
  69.     y = (int) (r * ranf()) + 2;
  70.  
  71.     mvaddch(y, x, '.');
  72.  
  73.     mvaddch(ypos[j], xpos[j], 'o');
  74.  
  75.     j = next_j(j);
  76.     mvaddch(ypos[j], xpos[j], 'O');
  77.  
  78.     j = next_j(j);
  79.     mvaddch(ypos[j] - 1, xpos[j], '-');
  80.     mvaddstr(ypos[j], xpos[j] - 1, "|.|");
  81.     mvaddch(ypos[j] + 1, xpos[j], '-');
  82.  
  83.     j = next_j(j);
  84.     mvaddch(ypos[j] - 2, xpos[j], '-');
  85.     mvaddstr(ypos[j] - 1, xpos[j] - 1, "/ \\");
  86.     mvaddstr(ypos[j], xpos[j] - 2, "| O |");
  87.     mvaddstr(ypos[j] + 1, xpos[j] - 1, "\\ /");
  88.     mvaddch(ypos[j] + 2, xpos[j], '-');
  89.  
  90.     j = next_j(j);
  91.     mvaddch(ypos[j] - 2, xpos[j], ' ');
  92.     mvaddstr(ypos[j] - 1, xpos[j] - 1, "   ");
  93.     mvaddstr(ypos[j], xpos[j] - 2, "     ");
  94.     mvaddstr(ypos[j] + 1, xpos[j] - 1, "   ");
  95.     mvaddch(ypos[j] + 2, xpos[j], ' ');
  96.  
  97.     xpos[j] = x;
  98.     ypos[j] = y;
  99.  
  100.     switch (getch()) {
  101.     case ('q'):
  102.     case ('Q'):
  103.         curs_set(1);
  104.         endwin();
  105.         ExitProgram(EXIT_SUCCESS);
  106.     case 's':
  107.         nodelay(stdscr, FALSE);
  108.         break;
  109.     case ' ':
  110.         nodelay(stdscr, TRUE);
  111.         break;
  112. #ifdef KEY_RESIZE
  113.     case (KEY_RESIZE):
  114.         r = (float) (LINES - 4);
  115.         c = (float) (COLS - 4);
  116.         break;
  117. #endif
  118.     }
  119.     napms(50);
  120.     }
  121. }
  122.  
  123. static void
  124. onsig(int n GCC_UNUSED)
  125. {
  126.     curs_set(1);
  127.     endwin();
  128.     ExitProgram(EXIT_FAILURE);
  129. }
  130.  
  131. static float
  132. ranf(void)
  133. {
  134.     long r = (rand() & 077777);
  135.     return ((float) r / 32768.);
  136. }
  137.